package com.dts.backproject.util;

import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.List;

public class FileUploadUtil {
    
    // 允许的图片文件类型
    private static final List<String> ALLOWED_IMAGE_TYPES = Arrays.asList(
        "image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp", "image/webp"
    );
    
    // 允许的文件类型
    private static final List<String> ALLOWED_FILE_TYPES = Arrays.asList(
        "image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp", "image/webp",
        "application/pdf", "text/plain", "application/msword", 
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
        "application/vnd.ms-excel",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    );
    
    // 允许的视频文件类型
    private static final List<String> ALLOWED_VIDEO_TYPES = Arrays.asList(
        "video/mp4", "video/avi", "video/mov", "video/wmv", "video/flv", 
        "video/webm", "video/mkv", "video/3gp", "video/quicktime"
    );
    
    /**
     * 验证图片文件
     * @param file 文件
     * @param maxSize 最大文件大小（字节）
     * @return 验证结果
     */
    public static String validateImageFile(MultipartFile file, long maxSize) {
        if (file.isEmpty()) {
            return "文件不能为空";
        }
        
        String contentType = file.getContentType();
        if (contentType == null || !ALLOWED_IMAGE_TYPES.contains(contentType.toLowerCase())) {
            return "只支持以下图片格式: JPEG, JPG, PNG, GIF, BMP, WEBP";
        }
        
        if (file.getSize() > maxSize) {
            return "文件大小不能超过 " + (maxSize / 1024 / 1024) + "MB";
        }
        
        return null; // 验证通过
    }
    
    /**
     * 验证通用文件
     * @param file 文件
     * @param maxSize 最大文件大小（字节）
     * @return 验证结果
     */
    public static String validateFile(MultipartFile file, long maxSize) {
        if (file.isEmpty()) {
            return "文件不能为空";
        }
        
        String contentType = file.getContentType();
        if (contentType == null || !ALLOWED_FILE_TYPES.contains(contentType.toLowerCase())) {
            return "不支持的文件格式";
        }
        
        if (file.getSize() > maxSize) {
            return "文件大小不能超过 " + (maxSize / 1024 / 1024) + "MB";
        }
        
        return null; // 验证通过
    }
    
    /**
     * 验证视频文件
     * @param file 文件
     * @param maxSize 最大文件大小（字节）
     * @return 验证结果
     */
    public static String validateVideoFile(MultipartFile file, long maxSize) {
        if (file.isEmpty()) {
            return "文件不能为空";
        }
        
        String contentType = file.getContentType();
        if (contentType == null || !ALLOWED_VIDEO_TYPES.contains(contentType.toLowerCase())) {
            return "只支持以下视频格式: MP4, AVI, MOV, WMV, FLV, WEBM, MKV, 3GP, QuickTime";
        }
        
        if (file.getSize() > maxSize) {
            return "文件大小不能超过 " + (maxSize / 1024 / 1024) + "MB";
        }
        
        return null; // 验证通过
    }
    
    /**
     * 获取文件扩展名
     * @param filename 文件名
     * @return 扩展名
     */
    public static String getFileExtension(String filename) {
        if (filename == null || !filename.contains(".")) {
            return "";
        }
        return filename.substring(filename.lastIndexOf("."));
    }
}
